package com.lifuixng.picturebackend.service;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.lifuixng.picturebackend.common.DeleteRequest;
import com.lifuixng.picturebackend.model.dto.picture.PictureQueryRequest;
import com.lifuixng.picturebackend.model.dto.space.SpaceAddRequest;
import com.lifuixng.picturebackend.model.dto.space.SpaceEditRequest;
import com.lifuixng.picturebackend.model.dto.space.SpaceQueryRequest;
import com.lifuixng.picturebackend.model.dto.space.SpaceUpdateRequest;
import com.lifuixng.picturebackend.model.entity.Picture;
import com.lifuixng.picturebackend.model.entity.Space;
import com.lifuixng.picturebackend.model.entity.User;
import com.lifuixng.picturebackend.model.vo.space.SpaceVO;

import javax.servlet.http.HttpServletRequest;

/**
* @author 26966
* @description 针对表【space(空间)】的数据库操作Service
* @createDate 2024-12-29 21:25:03
*/
public interface SpaceService extends IService<Space> {

    /**
     * 创建和更新空间 填充参数
     * @param space
     */
    void fillSpaceBySpaceLeve(Space space);

    /**
     * 校验参数
     */
    void verifySpace(Space space, boolean add);


    /**
     * 构造条件查询
     * @param spaceQueryRequest
     * @return
     */
    QueryWrapper<Space> getQueryWrapper(SpaceQueryRequest spaceQueryRequest);

    /**
     * 获取分页数据（未脱敏）
     * @param spaceQueryRequest
     * @return
     */
    Page<Space> getSpaceByPage(SpaceQueryRequest spaceQueryRequest);


    /**
     * 获取分页数据（脱敏）
     * @param spacePage
     * @return
     */
    Page<SpaceVO> getSpaceVOByPage(Page<Space> spacePage);


    /**
     * 更改空间 管理员
     * @param spaceUpdateRequest
     * @return
     */
    int updateSpace(SpaceUpdateRequest spaceUpdateRequest);


    /**
     * 删除空间 本人和管理员
     * @param deleteRequest
     * @return
     */
    int deleteSpace(DeleteRequest deleteRequest, User loginUser);

    /**
     * 编辑空间 本人更改 只能修改空间名
     * @param spaceEditRequest
     * @param loginUser
     * @return
     */
    int editSpace(SpaceEditRequest spaceEditRequest,User loginUser);


    Long addSpace(SpaceAddRequest spaceAddRequest,User loginUser);

}
